///******************** NG.Respate(C)  **********************************
//* 产品名称: Respate 科技
//* 文件名称: single.c
//* 程序作者: 雷帕特公司(南宫子萍)
//* 程序版本: V1.1														   
//* 编制日期: 2019/1/29
//* 功能描述: 系统日志
//* QQ:	2085827949
//**********************************************************************/
#include "lap_lib.h"


#include <sys/stat.h>
#include <fcntl.h>
#include <strings.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

//标志文件目录
char filePath[60] = "./LapTemp/";

//shell 命令 创建文件夹
char cmd[30] = "mkdir -p ";



/*********************************************************************************
** 函数名称: _lap_rmflage
** 功能描述: 清除标志位
** 输入参数: None.        
** 输出参数: None.
** 返回参数: return .
**********************************************************************************/
void _lap_rmflage(void)
{
	char rmcmd[30] ="rm -f ";
	strcat(rmcmd,filePath);
	system(rmcmd);
}




/*********************************************************************************
** 函数名称: lap_kill 
** 功能描述: 结束进程
** 输入参数: pid：要结束的进程        
** 输出参数: None.
** 返回参数: return .
**********************************************************************************/
void lap_kill(int pid)
{
	char shell_cmd[20] = {0};
	sprintf(shell_cmd,"kill -9 %d",pid);
	system(shell_cmd);
	while(1);
}



/*********************************************************************************
** 函数名称: lap_syslog
** 功能描述: 让此调用此函数的程序 只能有一个正在运行
** 输入参数: None.        
** 输出参数: None.
** 返回参数: return .
**********************************************************************************/
void lap_single(const char * file)
{

	//判断文件传参是否为空
	if(*file == NULL)
	{
		printf("*file == NULL\n");
		
		//结束当前进程
		lap_kill(getpid());
		return ;
	}

	//创建临时文件夹
	strcat(cmd,filePath);
	system(cmd);

	//得到标志文件 完整路径
	strcat(filePath,file);
	
	//尝试打开标志文件
	int fd = -1;
	fd = open(filePath,O_RDWR|O_TRUNC|O_CREAT|O_EXCL,0664);
	if(fd < 0)
	{
		if(errno == EEXIST)
			printf("请不要重复运行!\n 此程序正在运行ing..... \n");
		
		//结束当前进程
		lap_kill(getpid());
		return ;
	}

	//注册文件清理函数（主函数退出时自动调用）
	atexit(_lap_rmflage);
	
	close(fd);
	return ;
}




#if 0	//功能测试
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>


int main(void)
{
	lap_single("test.lap");

	int i=15;
	while(i--)
		sleep(1);
	return 0;
}
#endif







																						 
